//
//  StatusViewModel.swift
//  上海微博
//
//  Created by mac on 16/5/18.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

struct statusLayout {
    //1. 视图的宽度
    //控件间的间距
    let margin:CGFloat = 12
    //图片的间距
    let HpictureMargin:CGFloat = 2
    //每行图片的数量
    let pictureRowCount:CGFloat = 3
    //计算图片的宽度/高度
    let pictureWH:CGFloat
    let w :CGFloat
    //图片尺寸
    let pictureSize:CGSize
    
    init() {
    w = UIScreen.mainScreen().bounds.size.width - 2*margin
    pictureWH = (w-(pictureRowCount-1)*HpictureMargin)/pictureRowCount
    pictureSize = CGSize(width: pictureWH, height: pictureWH)
    }

    
}
//全局的结构体
let cz_statusLayout=statusLayout()

/// 微博视图模型(提示：如果用 OC 开发，仍然继承自 NSObject)
/// Swift 中定义`模型`，继承自 NSObject 目的：使用 KVC 支持字典转模型
/// 如果没有任何父类，类的 `量级` 轻
class StatusViewModel:CustomStringConvertible{
    
    //微博模型
    var status : Status
    
    //会员图标
    var userMemberImage : UIImage?
    //认证图标
    var userVipImage : UIImage?
    //来源字符串
    var sourceString : String?
    //日期
    var creatTime : NSDate?
    //配图视图大小-默认无大小
    var pictureSizeView = CGSizeZero
    
    //计算被转发配图的视图大小
    var RetweetedPctureSize = CGSizeZero
    //被转发微博文本
    var retweedText:String? {
       //没有转发微博
        if status.retweeted_status==nil {
            return nil
        }
        // 拼接字符串
        return "@" + (status.retweeted_status?.user?.screen_name ?? "")
            + ":" + (status.retweeted_status?.text ?? "")
    }
    
    
    // MARK - 私有函数 计算配图大小
    private func calculatepictureSizeView(pic_urls:[StatusPictures]?)->CGSize{
        //1. 判断图片数量
        let pictureCount = pic_urls?.count ?? 0
        
        if pictureCount == 0 {
            return CGSizeZero
        }
        let layout = cz_statusLayout
        
        //计算行数
        let row = CGFloat((pictureCount - 1)/Int(layout.pictureRowCount)+1)
        //根据行数计算视图高度
        let height = (row*layout.pictureSize.height+(row-1)*layout.HpictureMargin)
        
        
        return CGSize(width: layout.w, height: height)
    }
    
    // MARK: - 构造函数
    /// 使用微博模型实例化视图模型
    ///
    /// - parameter status: 微博模型
    ///
    /// - returns: 视图模型
     init(status: Status) {
       self.status=status
        //来源字符串的转换
        setsourceString()
        //缩略图尺寸
        pictureSizeView=calculatepictureSizeView(status.pic_urls)
        //被转发配图视图的大小
        RetweetedPctureSize=calculatepictureSizeView(status.retweeted_status?.pic_urls)
    //判断会员等级
    if status.user?.mbrank>0 && status.user?.mbrank<7 {
        //说明有会员
        userMemberImage=UIImage(named: "common_icon_membership_level\(status.user!.mbrank)")
        }
        /// 认证类型，-1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
        switch status.user?.verified_type ?? -1 {
        case 0: userVipImage=UIImage(named: "avatar_vip")
        case 2,3,5: userVipImage=UIImage(named: "avatar_enterprise_vip")
        case 220: userVipImage=UIImage(named: "avatar_grassroot")
        default : break
    }
  }
    //定义description属性
    var description :String {
       return status.description
    }
    
    //
    //来源字符串的转换
    private func setsourceString() {
        // 1. 来源字符串
        // <a href=\"http://weibo.com/\" rel=\"nofollow\">微博 weibo.com</a>
        // <a href=\"http://app.weibo.com/t/feed/6BAMHj\" rel=\"nofollow\">HUAWEI Mate 8</a>
        if let source = status.source,
            startIndex = source.rangeOfString("\">")?.endIndex,
            endIndex = source.rangeOfString("</a>")?.startIndex {
            
            // 提取字串
            sourceString = "来自 " + source.substringWithRange(startIndex..<endIndex)
        }
        
        // 2. 创建日期
        creatTime = NSDate.cz_sinaDate(status.created_at)
    }
}
